/**
 * 字符串与数组转换实现降维
 * @param {Array} arr
 * @returns {number[]}
 */
function stringReduce(arr){
    let s1 = arr+""

    return s1.split(",").map(item=>Number(item))
    // return 123
}

/**
 * 递归实现降维
 * @param {Array} arr
 * @returns {number[]}
 */
function reduceDimensior(arr){
    let ret = []
    let toArr = function(arr){
        arr.forEach(item => {
            item instanceof Array ? toArr(item) : ret.push(item)
        });
    }
    toArr(arr)
    return ret
}

/**
 * 利用栈操作实现降维
 * @param {Array} input
 * @returns {number[]}
 */
function flatten(input){
    const stack = [...input]
    const res = []
    while(stack.length){
        const next = stack.pop()
        if(Array.isArray(next)){
            stack.push(...next)
        }else{
            res.push(next)
        }
    }
    return res.reverse()
}

/**
 * 数组高级函数 reduce 实现降维
 * @param {Array} arr1 
 * @return {number[]}
 */
function flattenDeep(arr1){
    //reduce函数有两个参数。第一个参数是一个回调函数，用与针对数组项的操作；第二个参数是传入的初始值
    return arr1.reduce((acc,val)=>Array.isArray(val)?acc.concat(flattenDeep(val)):acc.concat(val), []);
}
